package thead;

/**
 * 上一个我们使用的是 isQuit 是成员变量
 * 我们这里改编成了main方法中的局部变量,就会报错,原因是什么呢?
 * 原因是 lambda 表达式,有一个语法规则,就是捕获变量
 * lambda 表达式的代码,是可以自动补货到上一层的作用域中的局部局部变量的
 * 所谓的补货,其实就是让lambda 表达式吧当前作用域当中的变量在lambda 表达式中拷贝一份(此时就算是上一层线程销毁了对lambda表达式也是没有影响的)
 * java 中,捕获变量的语法,有一个前提就是,捕获的遍历必须是 final 变量或者 事实上是final 的变量
 * 实施上的final变量 指的是 变量虽然没有被final修饰,但是在作用域内并没有对该变量进行修改,这就是事实上是final变量
 *
 */
public class Demo8 {
    public static void main(String[] args) throws InterruptedException {
        boolean isQuit = false;
        Thread t = new Thread(() -> {
//            while(!isQuit) {
//                System.out.println("线程工作中");
//                try {
//                    Thread.sleep(1000);
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
//            }
            System.out.println("线程工作完毕");
        });
        t.start();
        Thread.sleep(3000);
        isQuit = true;
        System.out.println("主线程工作完毕");
    }
}
